// RobotIndicator.qml
import QtQuick 2.15

Canvas {
    id: robotCanvas
    property real robotX: 0.0
    property real robotY: 0.0
    property string robotId: ""
    property string statusValue: ""
    // 注意：移除了 statusColor 属性，因为它是 Canvas 的 final 属性
    property real mapScale: 1.0
    property real mapOffsetX: 0
    property real mapOffsetY: 0
    property bool robotVisible: robotX !== 0 || robotY !== 0
    property real fixedRobotSize: 8  // 固定的机器人大小
    property real fixedFontSize: 12  // 固定的字体大小
    
    // 根据状态获取颜色的函数
    function getStatusColor() {
        if (statusValue.includes("RUNNING")) {
            return "#4CAF50"; // 绿色 - 正在运行
        } else if (statusValue.includes("FAILED")) {
            return "#F44336"; // 红色 - 失败
        } else if (statusValue.includes("COMPLETED")) {
            return "#2196F3"; // 蓝色 - 完成
        } else if (statusValue.includes("SUSPENDED")) {
            return "#FFC107"; // 黄色 - 暂停
        } else {
            return "#9E9E9E"; // 灰色 - 其他状态
        }
    }
    
    onPaint: {
        if (!robotVisible) return;
        
        const ctx = getContext("2d");
        ctx.resetTransform();
        ctx.clearRect(0, 0, width, height);
        
        // 直接使用屏幕坐标计算，不依赖于地图的坐标变换
        // 计算机器人在屏幕上的实际位置
        // 这里使用与地图相同的坐标变换逻辑
        const mapX = robotX * 10 + 100;  // 地图X坐标
        const mapY = robotY * 10;        // 地图Y坐标
        
        // 应用地图变换计算屏幕坐标
        const screenX = mapOffsetX + (mapX * mapScale);
        const screenY = mapOffsetY - (mapY * mapScale);  // 注意这里有个负号，因为Y轴翻转
        
        // 定义垂直排列的基准Y坐标（以绿色圆点为基准）
        const baseY = screenY;
        
        // 绘制机器人主体（固定大小）- 在最上方
        ctx.fillStyle = getStatusColor();
        ctx.beginPath();
        ctx.arc(screenX, baseY - fixedRobotSize - 8, fixedRobotSize, 0, Math.PI * 2);
        ctx.fill();
        
        // 绘制机器人ID和状态信息（固定字体大小）
        ctx.textAlign = "center";
        ctx.fillStyle = getStatusColor();
        
        // 绘制机器人ID（在绿色圆点下方）
        ctx.font = "bold " + (fixedFontSize + 2) + "px sans-serif";
        ctx.fillText(robotId, screenX, baseY + 5);
        
        // 绘制状态信息（在robotId下方）
        ctx.font = fixedFontSize + "px sans-serif";
        ctx.fillText(statusValue, screenX, baseY + 18);
    }
    
    // 当属性变化时重绘
    onRobotXChanged: requestPaint()
    onRobotYChanged: requestPaint()
    onStatusValueChanged: requestPaint()
    onRobotIdChanged: requestPaint()
    onMapScaleChanged: requestPaint()
    onMapOffsetXChanged: requestPaint()
    onMapOffsetYChanged: requestPaint()
}